<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // bind(thisArg,arg1,arg2...argN)
    // 1. 根据原函数得到一个新函数
    // 2. 在新函数执行时,将this始终指向bind方法的第一参数(对象), 如果不传参,或者传null / undefined => 不改变this的指向
    // 3. 如果原函数需要接收参数,
    //    a. 调用bind方法时,从第二参数开始依次向后传 => 参数定死
    //    b. 如果调用bind方法时不指定参数,可以在新函数调用时依次传入  => 参数比较灵活
    //    c. 调用bind方法时,传入一部分参数, 新函数调用时, 传入另个一部分参数

    //    bind()方法传入的参数 + 新函数调用时传入的参数  >= 原函数需要的参数

    //  授人以鱼不如授人以渔


    function fn(a,b){
        console.log("函数执行了", a, b);
        console.log(this);
    }

    // var newFn = fn.bind(document); // 根据原函数得到一个新函数 (新函数执行时 this始终指向bind方法的第一参数  document)
    // // console.log(newFn);
    // // console.log(newFn === fn);

    // newFn();
    // newFn();
    // newFn();
    // newFn();
    // newFn();
    // newFn();
    // newFn();

    // 参数定死
    // var newFn = fn.bind(document,10,20); // 根据原函数得到一个新函数 (新函数执行时 this始终指向bind方法的第一参数  document)

    // newFn();
    // newFn();
   

    // var newFn = fn.bind(document); // 根据原函数得到一个新函数 (新函数执行时 this始终指向bind方法的第一参数  document)

    // newFn(10,20);
    // newFn(100,200);


    var newFn = fn.bind(document,10); // 根据原函数得到一个新函数 (新函数执行时 this始终指向bind方法的第一参数  document)

    newFn(20);
    newFn(200);

</script>
</html>